<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
</head>
<body>
	
</body>
</html>
<script>

	

//for-----------------------------------------------------------------------------------------
//最简单的一种循环遍历方法，也是使用频率最高的一种，可优化
 var arr = [1, 2, 3, 4, 5, 6]
 for(var i = 0; i < arr.length; i++) {
 	console.log(arr[i])

// 123456、

 var arr = [1, 2, 3, 4, 5, 6]
 var len = arr.length
 for(var i = 0; i < len; i++) {
 	console.log(arr[i])
 }
//1 2 3 4 5 6
// 优化：使用临时变量，将长度缓存起来，避免重复获取数组长度，当数组较大时优化效果才会比较明显


// forEach------------------------------------------------------------------------------------------
//     数组里的元素个数有几个，该方法里的回调就会执行几次 	
//     第一个参数是数组里的元素，第二个参数为数组里元素的索引，第三个参数则是它自己
//     数组自带的遍历方法，虽然使用频率略高，但是性能仍然比普通循环略低
 var arr = [1, 2, 3, 4, 5, 6]
 arr.forEach(function (item, idnex, array) {
     console.log(item)     // 1 2 3 4 5 6  
     console.log(array)    // [1, 2, 3, 4, 5, 6]
 })


// map=----------------------------------------------------------------------------------------------
//     遍历每一个元素并且返回对应的元素(可以返回处理后的元素) (map 映射 一一 对应)
//     返回的新数组和旧数组的长度是一样的
//     使用比较广泛，但其性能还不如 forEach
 var arr = [1, 2, 3, 4, 5, 6]
 var newArr = arr.map(function (item, idnex) {
     return item * item
 })
//console.log(newArr)    // [1, 4, 9, 16, 25, 36]

// filter--------------------------------------------------------------------------------------------
//  遍历数组，过滤出符合条件的元素并返回一个新数组
 var arr = [
 	{ id: 1, name: '买笔', done: true },
 	{ id: 2, name: '买笔记本', done: true },
 	{ id: 3, name: '练字', done: false }
 ]   
 var newArr = arr.filter(function (item, index) {
 	return item.done
 })
console.log(newArr)
//[{ id: 1, name: '买笔', done: true },{ id: 2, name: '买笔记本', done: true }]



//some------------------------------------------------------------------------------------------------
// 遍历数组，只要有一个以上的元素满足条件就返回 true，否则返回 false
 var arr = [
 	{ id: 1, name: '买笔', done: true },
 	{ id: 2, name: '买笔记本', done: true },
 	{ id: 3, na: '练字', done: false }
 ]
 var bool = arr.some(function (item, index) {
 	return item.done
 })

// console.log(bool)    // true


// every------------------------------------------------------------------------------------------------
//  遍历数组，每一个元素都满足条件 则返回 true，否则返回 false
var arr = [
	{ id: 1, name: '买笔', done: true },
	{ id: 2, name: '买笔记本', done: true },
	{ id: 3, name: '练字', done: false }
]
var bool = arr.every(function (item, index) {
	return item.done
})
console.log(bool)    // false


// find（ES6）-----------------------------------------------------------------------------------------
//  遍历数组，返回符合条件的第一个元素，如果没有符合条件的元素则返回 undefined	
 var arr = [1, 1, 2, 2, 3, 3, 4, 5, 6]
 var num = arr.find(function (item, index) {
  return item === 3
 })      
 console.log(num)   //  3


// findIndex（ES6）--------------------------------------------------------------------------------------
//遍历数组，返回符合条件的第一个元素的索引，如果没有符合条件的元素则返回 -1
 var arr = [1, 1, 2, 2, 3, 3, 4, 5, 6]
 var num = arr.findIndex(function (item) {
 	return item === 3
 })
// console.log(num)   //  4


//reduce求和---------------------------------------------------------------------------------------
var nums = [1, 5, 2, 6];
var sum = nums.reduce((x, y) => x + y);   //汇总
console.log(sum); // returns 14
//循环求和



// console.log(Array.prototype)  即log出 所有的方法   
// console.log(String.prototype) 




</script>